package com.vviton.zyhj.admin.service.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.vviton.zyhj.admin.service.DhglService;
import com.vviton.zyhj.common.base.AppConfig;
import com.vviton.zyhj.common.base.BaseService;
import com.vviton.zyhj.common.common.CodeConstants;
import com.vviton.zyhj.common.dao.TYyxtDdglDhjlbMapper;
import com.vviton.zyhj.common.dao.TYyxtJyglDhwlxxMapper;
import com.vviton.zyhj.common.entity.TYyxtCode;
import com.vviton.zyhj.common.entity.TYyxtJyglDhwlxx;
import com.vviton.zyhj.common.utils.ExpressQueryUtils;
import com.vviton.zyhj.common.utils.page.Page;
import com.vviton.zyhj.common.view.ParamDdcx;
import com.vviton.zyhj.common.view.ViewDdcx;
import com.vviton.zyhj.common.view.ViewDhwlxx;
import com.vviton.zyhj.common.view.ViewKdxx;
import com.vviton.zyhj.common.view.ViewWlgzxx;

/**
 * ClassName: DhglServiceImpl <br/>
 * Function: 自营兑换记录管理ServiceImpl. <br/>
 * Date: 2016年11月15日 下午1:34:07 <br/>
 *
 * @author Dengshiyu
 * @version 1.0
 * @since JDK 1.7
 */
public class DhglServiceImpl extends BaseService implements DhglService {

    /** 日志 */
    private static Logger logger = Logger.getLogger(DhglServiceImpl.class);

    /** 读取配置文件信息 */
    @Autowired
    private AppConfig appConfig;

    /** 兑换记录表Mapper */
    @Autowired
    private TYyxtDdglDhjlbMapper tYyxtDdglDhjlbMapper;

    /** 兑换物流信息Mapper */
    @Autowired
    private TYyxtJyglDhwlxxMapper tYyxtJyglDhwlxxMapper;

    /**
     * getDhjlPagination,根据各种条件查询兑换记录. <br/>
     * Author: Dengshiyu <br/>
     * Create Date: 2016年11月15日 <br/>
     * ===============================================================<br/>
     * Modifier: Dengshiyu <br/>
     * Modify Date: 2016年11月15日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     * 
     * @param paramDdcx 兑换记录查询参数
     * @return Page
     * @since JDK 1.7
     */
    @Override
    public Page getDhjlPagination(ParamDdcx paramDdcx) {
        Page page = new Page();
        if (StringUtils.isBlank(paramDdcx.getYwy())) {
            logger.info("兑换记录查询业务域不能为空");
            return page;
        }
        //paramDdcx.setDdlb(CodeConstants.DHLB_LP);
        paramDdcx.setTgflx(CodeConstants.TGFLX_PT);
        paramDdcx.setHzfid(appConfig.getAdminKtId());
        page.setParam(paramDdcx);
        Integer total = tYyxtDdglDhjlbMapper.getDdcxTotalPagination(page);
        page.setTotal(total);
        // 分页查询数据
        page.setPageSize(paramDdcx.getPageSize());
        page.setCurrPage(paramDdcx.getCurrPage());
        if (total > 0) {
            List<ViewDdcx> viewDdcxList = tYyxtDdglDhjlbMapper.getDdcxPagination(page);
            // 字段解析
            Map<String, TYyxtCode> dhztMap = this.getCodeMapCodeclass(CodeConstants.DHZT);
            TYyxtCode tYyxtCode = null;
            for (ViewDdcx viewDdcx : viewDdcxList) {
                tYyxtCode = dhztMap.get(CodeConstants.DHZT + viewDdcx.getZt());
                if (tYyxtCode != null) {
                    viewDdcx.setZtDesc(tYyxtCode.getCodedesc());
                }
            }
            page.setData(viewDdcxList);
        }
        return page;
    }

    /**
     * getDhwlxx,根据兑换Id获取兑换物流信息. <br/>
     * Author: Dengshiyu <br/>
     * Create Date: 2016年12月23日 <br/>
     * ===============================================================<br/>
     * Modifier: Dengshiyu <br/>
     * Modify Date: 2016年12月23日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     * 
     * @param dhid 兑换Id
     * @return 兑换物流信息
     * @since JDK 1.7
     */
    @Override
    public ViewDhwlxx getDhwlxx(String dhid) {
        ViewDhwlxx dhwlxx = tYyxtJyglDhwlxxMapper.getViewDhwlxxByDhid(dhid);
        return dhwlxx;
    }

    /**
     * getWlgzxx,根据兑换Id查询物流跟踪信息. <br/>
     * Author: Dengshiyu <br/>
     * Create Date: 2016年12月23日 <br/>
     * ===============================================================<br/>
     * Modifier: Dengshiyu <br/>
     * Modify Date: 2016年12月23日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     * 
     * @param dhid 兑换编号
     * @return 物流跟踪信息
     * @since JDK 1.7
     */
    @Override
    public ViewWlgzxx getWlgzxx(String dhid) {

        TYyxtJyglDhwlxx dhwlxx = tYyxtJyglDhwlxxMapper.getDhwlxxByDhid(dhid);
        ViewWlgzxx wlgz = new ViewWlgzxx();
        if (dhwlxx != null && StringUtils.isNotBlank(dhwlxx.getCyfbm()) && StringUtils.isNotBlank(dhwlxx.getHydh())) {
            //调用物流信息的接口
            try {
                JSONObject wlgzxx = ExpressQueryUtils.getExpressInfo(dhwlxx.getCyfbm(), dhwlxx.getHydh());

                String flag = wlgzxx.getString("flag");
                wlgz.setExpSpellName(wlgzxx.getString("expSpellName"));
                wlgz.setExpTextName(wlgzxx.getString("expTextName"));
                wlgz.setMailNo(wlgzxx.getString("mailNo"));
                wlgz.setTel(wlgzxx.getString("tel"));
                wlgz.setUpdate(wlgzxx.getString("update"));
                wlgz.setStatus(wlgzxx.getString("status"));
                wlgz.setUpdateStr(wlgzxx.getString("updateStr"));
                wlgz.setRet_code(wlgzxx.getString("ret_code"));
                if ("true".equals(flag)) {
                    wlgz.setFlag(true);
                    List<ViewKdxx> viewKdxxList = new ArrayList<ViewKdxx>();
                    JSONArray wlgzxxArray = wlgzxx.getJSONArray("data");
                    if (wlgzxxArray != null) {
                        Iterator<Object> iterator = wlgzxxArray.iterator();
                        while (iterator.hasNext()) {
                            JSONObject expTemp = (JSONObject) iterator.next();
                            ViewKdxx kdxx = new ViewKdxx();
                            kdxx.setContext(expTemp.getString("context"));
                            kdxx.setTime(expTemp.getString("time"));
                            viewKdxxList.add(kdxx);
                        }
                        wlgz.setKdxxList(viewKdxxList);
                    }

                } else {
                    wlgz.setFlag(false);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            wlgz.setFlag(false);
        }
        return wlgz;
    }

}
